package Q17_14_Smallest_K; import java.util.Arrays; import CtCILibrary.AssortedMethods; public class Tester { public static int rankB(int[] array, int rank) { int[] cloned = array.clone(); Arrays.sort(cloned); return cloned[rank]; } public static void swap(int[] array, int i, int j) { int t = array[i]; array[i] = array[j]; array[j] = t; } public static boolean isUnique(int[] array) { int[] cloned = array.clone(); Arrays.sort(cloned); for (int i = 1; i < cloned.length; i++) { if (cloned[i] == cloned[i - 1]) { return false; } } return true; } public static int max(int[] array, int left, int right) { int max = Integer.MIN_VALUE; for (int i = left; i <= right; i++) { max = Math.max(array[i], max); } return max; } public static int randomInt(int n) { return (int) (Math.random() * n); } public static int randomIntInRange(int min, int max) { return randomInt(max + 1 - min) + min; } public static boolean isEqual(int[] array1, int[] array2) { if (array1.length != array2.length) { return false; } for (int i = 0; i < array1.length; i++) { if (array1[i] != array2[i]) { return false; } } return true; } public static boolean isEquivalent(int[] array1, int[] array2) { Arrays.sort(array1); Arrays.sort(array2); return isEqual(array1, array2); } public static boolean testArray(int[] array1) { int[] copy = array1.clone(); int[] array2 = new int[array1.length]; for (int i = 0; i < array1.length; i++) { array2[i] = QuestionD.rank(array1, i); } Arrays.sort(array1); if (!isEqual(array1, array2)) { System.out.println("ERROR"); System.out.println("Original Array: " + AssortedMethods.arrayToString(copy)); System.out.println("Ranked Array: " + AssortedMethods.arrayToString(array2)); System.out.println("Sorted Array: " + AssortedMethods.arrayToString(array1)); return false; } return true; } public static void main(String[] args) { int numberOfTests = 1000; int countWithC = 0; int countTotal = 0; for (int i = 0; i < numberOfTests; i++) { int length = AssortedMethods.randomIntInRange(1, 10); int rank = AssortedMethods.randomIntInRange(1, length); int minRange = -1 * i; int maxRange = i; int[] array = AssortedMethods.randomArray(length, minRange, maxRange); int[] smallestA = QuestionA.smallestK(array.clone(), rank); int[] smallestB = QuestionB.smallestK(array.clone(), rank); int[] smallestD = QuestionD.smallestK(array.clone(), rank); int[] smallestC = smallestD; if (isUnique(array)) { smallestC = QuestionC.smallestK(array.clone(), rank); countWithC++; } countTotal++; if (!isEquivalent(smallestA, smallestB) || !isEquivalent(smallestB, smallestD) || !isEquivalent(smallestD, smallestC)) { System.out.println("ERROR"); System.out.println(array); System.out.println("ArrayA: " + AssortedMethods.arrayToString(smallestA)); System.out.println("ArrayA: " + AssortedMethods.arrayToString(smallestA)); System.out.println("ArrayB: " + AssortedMethods.arrayToString(smallestB)); System.out.println("ArrayC: " + AssortedMethods.arrayToString(smallestC)); System.out.println("ArrayD: " + AssortedMethods.arrayToString(smallestD)); break; } } System.out.println("Completed " + countTotal + " runs, including " + countWithC + " with C"); } }